import java.util.Vector;

public class 标签符号 {

    public String 名称;
    public int 地址; // 标签在字节码中的地址
    public boolean 是否已定义;
    public boolean 是否为前向引用; // 如果为 true 则表示后续定义标签时需要解析引用
    public Vector<Integer> 引用;

    public 标签符号(String 名称) {
        this.名称 = 名称;
        是否已定义 = false;
        是否为前向引用 = true;
    }

    public 标签符号(String 名称, int 地址) {
        this.名称 = 名称;
        this.地址 = 地址;
        是否已定义 = true;
        是否为前向引用 = false;
    }

    public void 添加引用(int 地址) {
        if (引用 == null) {
            引用 = new Vector<>();
        }

        引用.add(地址);
    }

    public void 解析引用(byte[] 字节码) {
        if (引用 == null) return;
        if (!是否为前向引用) return;

        // 把标签地址填到所有引用的地址上
        for (var 引用地址 : 引用) {
            字节码汇编器.写整数(字节码, 引用地址, 地址);
        }

        是否为前向引用 = false;
    }

    @Override
    public String toString() {
        String 结果列表 = "";
        if (引用 != null) {
            结果列表 = "[引用=" + 引用 + "]";
        }

        return 名称 + "@" + 地址 + 结果列表;
    }
}
